<?php
namespace Home\Service;
use Org\Util\Curl;
// +----------------------------------------------------------------------
// | Date:2017年02月09日
// +----------------------------------------------------------------------
// | Author: EK_熊<1439527494@qq.com>
// +----------------------------------------------------------------------
// | Description: 此文件作用于****
// +----------------------------------------------------------------------
class AccountService extends \Think\Controller{
    
    protected $code = '5885aeeda19e7';
    protected $base_url = "";
    protected $errmsg = '';
    protected $cookie_key='user';
    protected $cookie_expire=2592000*3;//默认一个月
    protected $session_key='user';
    protected $debug = '';
    
    public function __construct(){
        $this->debug = C('DEBUG_API_ACCOUNT');
        if ($this->debug){
            $this->base_url = "http://localhost/insight_account2016/index.php?g=Home&m=Api&code=$this->code&a=";
        }else{
            $this->base_url = "http://insightaccount.idea.3xy.me/index.php?g=Home&m=Api&code=$this->code&a=";
        }
    }
    
    /**
     * 获取当前登录用户信息，可用于检测登录状态
     * @return mixed|void|NULL|unknown|boolean
     * date:2017年1月23日
     * author: EK_熊
     */
    public function userInfo(){
        $userInfo =cookie($this->cookie_key);
        if ($userInfo) {
            return $userInfo;
        }else{
            $userInfo = session($this->session_key);
            if ($userInfo) {
                return $userInfo;
            }
        }
        $this->errmsg = '未登录';
        return false;
    }
    
    /**
     * 补充添加用户字段信息到cookie或者session,
     * @param array $data
     * date:2017年3月1日
     * author: EK_熊
     */
    public function appendUserInfo($data=[]){
        $useInfo_old = $this->userInfo();
        $useInfo_new = $useInfo_old+$data;
        
        session($this->session_key,$useInfo_new);
        if (cookie($this->cookie_key)) cookie($this->cookie_key,$useInfo_new,array('expire'=>$this->cookie_expire));
    }
    
    /**
     * 登录
     * @param unknown $email    用户邮箱
     * @param unknown $password 密码
     * @param string $remember  记住登录状态
     * @param string $remember  是否启用非法登录，通过传输加密密码登录
     * date:2017年1月12日
     * author: EK_熊
     */
    public function login($email,$password,$field='',$remember=true,$illegal=false){
        $account = trim($email);
        $password = trim($password);
        if (empty($account)) {
            $this->errmsg = '请输入账户名';
            return false;
        }
        if (empty($password)) {
            $this->errmsg = '请输入密码';
            return false;
        }
        $userInfo = $this->_request('login_email',['account'=>$account.'@gdinsight.com','password'=>$password,'field'=>$field,'illegal'=>$illegal]);
        if (!$userInfo)  return false;
        unset($userInfo['status']);
        unset($userInfo['errcode']);
        
        //获取到用户数据，记录session
        session($this->session_key,$userInfo);
        //是否开启浏览自动记住用户信息
        if ($remember) {
            cookie($this->cookie_key,$userInfo,array('expire'=>$this->cookie_expire));
        }
        return true;
    }
    
    /**
     * 退出登录
     * 
     * date:2017年1月23日
     * author: EK_熊
     */
    public function logout(){
        session($this->session_key,null);
        cookie($this->cookie_expire,null);
        return true;
    }
    
    /**
     * 传入数据集合，集合包含字段线索字段,先提取线索字段组装成字符串，发送请求获取用户数据，再循环赋值返回数据源
     * @param array $key     线索字段，可选【uid,name】
     * @param array $data    数据集合，其中的字段必须和线索字段同名
     * @param array $fields  需要赋值的用户信息字段,除了线索字段之外，至少要附带2个额外的字段才不会报错，如‘sn,ep_id,ep_name’
     * date:2017年1月4日
     * author: EK_熊
     */
    public function append_user_field($key='',$data=[],$fields=''){
        $valueBox = [];
        $data_key = $data_user_key = $key;
        if (is_array($key)){
            $key_k = array_keys($key);
            $key_v = array_values($key);
            $data_key = $key_k[0];
            $data_user_key = $key_v[0];
        }
        foreach ($data as $k=>$v) {
            $valueBox[] = $v[$data_key];
        }
        $valueBox = array_unique($valueBox);
        $request = $this->get_user_batch($data_user_key,implode(',',$valueBox),$fields);
        if (!$request) return $data;
        $requestKeyBox = array_keys(current($request));
        foreach ($data as $k=>$v){
            $userInfo = $request[$v[$data_key]];
            if ($userInfo) {
                $data[$k] = $userInfo+$v;
            }else{
                for ($i=0;$i < count($requestKeyBox); $i++){
                    if ($requestKeyBox[$i] !== $key) {
                        $data[$k][$requestKeyBox[$i]] = '';
                    }
                    
                } 
            }
           
        }
        return $data;
    }
    
    /**
     * 获取全部部门数据
     * 
     * date:2017年3月27日
     * author: EK_熊
     */
    public function get_department(){
        $request = $this->_request('get_department');
        if ($request['errcode'] !==0) return false;
        
        return $request['data'];        
    }
    
    
    
    
    
    /**
     * 批量获取用户数据
     * @param string $key     '线索查找字段'
     * @param string $value   '查找值'
     * @param string $fields  '结果目标字段'
     * @return boolean
     * date:2017年3月6日
     * author: EK_熊
     */
    public function get_user_batch($key='',$value='',$fields=''){
        $request = $this->_request('get_user_batch',['key'=>$key,'val'=>$value,'field'=>$fields]);
        if ($request['errcode'] !==0) return false;
        
        return $request['userInfo'];        
    }
    
    
    /**
     * 获取单条用户信息
     * @param array $where
     * @param string $field
     * date:2017年2月27日
     * author: EK_熊
     */
    public function get_user_by_field($where=[],$field=''){
        $baseField = "ep_id,dep_id,dep_name,sn,ep_name";
        $field = rtrim($baseField.','.$field,',');
        $request = $this->_request('get_user_by_field',['where'=>urlencode(json_encode($where)),'field'=>$field]);
        if ($request['errcode'] !==0) return false;
        
        return $request['ret'];
    }
    
    /**
     * 获取部门信息，返回select下拉菜单语句
     * @param array $where
     * @param string $field
     * date:2017年2月27日
     * author: EK_熊
     */
    public function get_department_select($selectid){
        $request = $this->_request('get_department_select',['selectid'=>$selectid]);
        if ($request['errcode'] !==0) return false;
        
        return $request['data'];
    }
    
    /**
     * 获取领导信息
     * @param unknown $key
     * @param unknown $val
     * @param string $field
     * date:2017年3月7日
     * author: EK_熊
     */
    public function get_leader_info($key,$val,$field=''){
        $request = $this->_request('get_leader_info',['key'=>$key,'val'=>$val,'field'=>$field]);
        if ($request['errcode'] !==0) return false;
        return $request['data'];
    }
    /**
     * 批量获取
     * @param unknown $key
     * @param unknown $val
     * @param string $field
     * @return boolean
     * date:2017年5月27日
     * author: EK_熊
     */
    public function get_leader_info_all($where=[],$field=''){
        
        $request = $this->_request('get_leader_info_all',['where'=>urlencode(json_encode($where)),'field'=>$field]);
        if ($request['errcode'] !==0) return false;
        return $request['data'];
    }
    
    
    /**
     * 获取哺乳假、待产假的用户信息
     * @param unknown $sn
     * date:2017年5月27日
     * author: EK_熊
     */
    public function suckling($sn){
        $request = $this->_request('get_suckling_info',['sn'=>$sn]);
        if ($request['errcode'] !==0) return false;
        return $request['data'];        
    }
    
    /**
     * 分批获取用户的基础信息，
     * @param number $page  页码
     * @param number $limit 记录数
     * @param string $field
     * date:2017年3月16日
     * author: EK_熊
     */
    public function get_all_user_baseinfo($field='',$where='',$page=0,$limit=0){
        $request = $this->_request('get_all_user_baseinfo',['page'=>$page,'limit'=>$limit,'field'=>$field,'where'=>urlencode(json_encode($where))]);
        if ($request['errcode'] !==0) return false;
        return $request['data'];
    }
    
    
    
    /**
     * 更新用户个人信息
     * @param unknown $uid      用户id
     * @param string $nickname  昵称
     * @param string $avatar    base64字符串
     * date:2017年1月12日
     * author: EK_熊
     */
    public function update_user($uid,$userinfo=[],$field=''){
        $request = $this->_request('update_user',['uid'=>$uid,'userdata'=>urlencode(json_encode($userinfo)),'field'=>$field]);
        if ($request){
            $userInfo = $request['userInfo'];
            $old_cookie_info = cookie($this->cookie_key);
            cookie($this->cookie_key,$userInfo+$old_cookie_info,array('expire'=>$this->cookie_expire));
            $old_session = session($this->session_key);
            session($this->session_key,$old_session+$userInfo);
        }
        return $userInfo;
    }
    
    
    /**
     * 从内部登录访问系统获取对应的用户数据
     * @param unknown $actionname
     * @param unknown $field
     * date:2016年12月28日
     * author: EK_熊
     */
    public function _request($actionname,$fields=[]){
        $apiUrl = $this->base_url.$actionname;
        $curl = new \Curl();
        $result = $curl->post($apiUrl, $fields);
        if (!$result) return '接口请求错误！';
        $resultAry =  json_decode($result,true);
        if ($resultAry['errcode'] !== 0) {
            $this->errmsg = $resultAry['info'];
            return false;
        }
        return $resultAry;
    }
    
    /**
     * 获取错误信息
     * @return string|unknown
     * date:2017年1月12日
     * author: EK_熊
     */
    public function getError(){
        return $this->errmsg;
    }
    
}